package com.fanco.learn_datastruct_leetcode.jvm;

import java.nio.ByteBuffer;

/**
 * @author qiaowang 2021/8/30
 * 描述
 * netty + nio
 * 写nio程序时 netty, 经常采用的方式是 bytebuffer 读取或者写入数据，这是一种基于通道与 缓冲区的 i/o方式。
 * 可以直接分配堆外内存。
 *
 * ByteBuffer.allocate(capability): 分配JVM内存，属于gc管辖范围，需要拷贝所以速度慢
 * ByteBuffer.allocateDirect(capability)： 分配os本地内存，不属于GC管辖范围，不需要内存的拷贝，所以速度相对较快。
 * 如果一直分配本地内存，堆内存不使用，则堆内存不会消耗引起 gc,当本地内存没有了就会引起 direct buffer memory
 */
public class DirectBufferMemoryDemo {

    public static void main(String[] args) {
        // -Xms10m -Xm10m -XX:+PrintGCDetails -XX:MaxDirectMemory=5m
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(6 * 1024 * 1024);
    }
}
